<?php
$arequetes = array();
$nbRequetes = 0;

$dest=sprintf("fonction.sql");
$fp = fopen($dest, "w");

$addfonctionInsertQuery="";
$adddroitInsertQuery="";
$addmasqueInsertMasqueQuery="";
$addmasqueInsertFonctionQuery="";
$addDroitInMasqueQuery="";
$addGroupeUseMasqueQuery="";
$addDefinitionDroitQuery="";

$firstAddfonctionInsertQuery=1;
$firstAdddroitInsertQuery=1;
$firstAddmasqueInsertMasqueQuery=1;
$firstAddmasqueInsertFonctionQuery=1;
$firstAddDroitInMasqueQuery=1;
$firstAddGroupeUseMasqueQuery=1;
$firstAddDefinitionDroitQuery=1;

$fonct = array();
$masque = array();
$droitmasquenom = array();
$menu=array();

$nbFonc=nextIncrement('fonction', $sql_serveur, $sql_login, $sql_pass, $sql_base)-1;
$nbMask=nextIncrement('masque', $sql_serveur, $sql_login, $sql_pass, $sql_base)-1;
$nbDroitMask=nextIncrement('droitmasquenom', $sql_serveur, $sql_login, $sql_pass, $sql_base)-1;
$nbMenu=nextIncrement('rportal_menu', $sql_serveur, $sql_login, $sql_pass, $sql_base)-1;

function fillFonctions()
{
	global $fonct;
	$query = "SELECT id_fonction, code_op, description, id_menu, fichier FROM fonction";
	$result = rportalrequete($query) or rportalerreur ("$query","?op=");
	while($row=rportalligne($result))
	{
		$content=array();
		$content[0]=$row['id_fonction'];
		$content[1]=$row['code_op'];
		$content[2]=$row['description'];
		$content[3]=$row['id_menu'];
		$content[4]=$row['fichier'];
		$fonct[$row['id_fonction']]=$content;
	}
}

function fillMasques()
{
	global $masque;
	$query="SELECT id_mask, nom_mask FROM masque";
	$result=rportalrequete($query) or rportalerreur ("$query","?op=");
	while($row=rportalligne($result))
	{
		$content=array();
		$content[0]=$row['id_mask'];
		$content[1]=$row['nom_mask'];
		$masque[$row['id_mask']]=$content;
	}

}

function fillDroitmasquenom()
{
	global $droitmasquenom;
	$query = "SELECT * FROM droitmasquenom";
	$result=rportalrequete($query) or rportalerreur ("$query","?op=");
	while($row=rportalligne($result))
	{
		$content=array();
		$content[0]=$row['id'];
		$content[1]=$row['nom'];
		$content[2]=$row['description'];
		$droitmasquenom[$row['id']]=$content;
	}

}

function fillMenu()
{
	global $menu;
	$query = "SELECT * FROM rportal_menu";
	$result=rportalrequete($query) or rportalerreur ("$query","?op=");
	while($row=rportalligne($result))
	{
		$content=array();
		$content[0]=$row['id'];
		$content[1]=$row['fichier'];
		$content[2]=$row['nom'];
		$content[3]=$row['titre'];
		$menu[$row['id']]=$content;
	}
}

function nextIncrement($table, $sql_serveur, $sql_login, $sql_pass, $sql_base)
{
	$next_increment 	= 0;
	$cnx = @mysql_connect($sql_serveur,$sql_login,$sql_pass) or die ("Connexion au serveur $sql_serveur impossible");
	$base = @mysql_select_db($sql_base) or die ("Connexion &agrave; la base $sql_base impossible");
	$qShowStatusResult 	= mysql_query("SHOW TABLE STATUS LIKE '$table'") or die ("ERREUR");
	
	while ($row = mysql_fetch_assoc($qShowStatusResult)) {	
		$next_increment = $row['Auto_increment'];
	}
	mysql_free_result($qShowStatusResult);

	return $next_increment;
}

function searchFonction($code_op)
{
	global $fonct;
	global $nbFonc;

	for($counter=1;$counter<=$nbFonc;$counter++)
	{
		if($fonct[$counter][1]==$code_op)
		{
			return $fonct[$counter][0];
		}
	}
	return "-1";
}

function searchMasque($nom)
{
	global $masque;
	global $nbMask;

	for($counter=1;$counter<=$nbMask;$counter++)
	{
		if($masque[$counter][1]==$nom)
		{
			return $masque[$counter][0];
		}
	}
	return "-1";
}


function searchDroitmasquenom($nom)
{
	global $droitmasquenom;
	global $nbDroitMask;

	for($counter=1;$counter<=$nbDroitMask;$counter++)
	{
		if($droitmasquenom[$counter][1]==$nom)
		{
			return $droitmasquenom[$counter][0];
		}
	}
	return "-1";
}

function searchMenu($nom)
{
	global $menu;
	global $nbMenu;

	for($counter=1;$counter<=$nbMenu;$counter++)
	{
		if($menu[$counter][2]==$nom)
		{
			return $menu[$counter][0];
		}
	}
	return "-1";
}

function getmenuid($menu){
	global $nbMenu;
	
	$menid=searchMenu($menu);
	
	if($menid!="-1"){
		return $menid;
	}
	return 0;
}

function addfonction($code_op,$description,$menu,$droit,$fichier){

	global $arequetes;
	global $nbRequetes;
	global $fonct;
	global $nbFonc;
	global $fp;
	global $firstAddfonctionInsertQuery;
	global $addfonctionInsertQuery;
	
	//Fichier install est du type readinifile
	//Il doit etre sette si l'on veut sauvegarder la mise a jour d'une fonction
	global $fichier_install;
	$menuid = getmenuid($menu);
	
	$idFonc=searchFonction($code_op);
	
	if($idFonc=="-1"){
	
		if($firstAddfonctionInsertQuery==1)
		{
			$addfonctionInsertQuery="INSERT INTO fonction (code_op,description,id_menu,fichier) VALUES ('".$code_op."','".addslashes($description)."','".$menuid."','".$fichier."')";			
			$firstAddfonctionInsertQuery=0;
		}
		else
		{			
			$addfonctionInsertQuery=$addfonctionInsertQuery . ", ('".$code_op."','".addslashes($description)."','".$menuid."','".$fichier."')";
		}

		$fid = $nbFonc + 1; //nextIncrement('fonction', $sql_serveur, $sql_login, $sql_pass, $sql_base);
		
		// MAJ du tableau des fonctions!!
		$content=array();
		$content[0]=$fid;
		$content[1]=$code_op;
		$content[2]=$description;
		$content[3]=$id_menu;
		$content[4]=$fichier;
		$fonct[$fid]=$content;
		$nbFonc = $nbFonc+1;

		if(is_array($droit)){
			if(count($droit)>0){
				for($i=0;$i<count($droit);$i++)
					adddroit($fid,$droit[$i]);
			}else{
				adddroit($fid,2);
			}
		}else{
			adddroit($fid,2);
		}
	}else{
		$f = rportalligne($result);
		$query="UPDATE fonction SET description='".addslashes($description)."' , fichier='".$fichier."', id_menu='".$menuid."'";
		$query.=" WHERE code_op='".$code_op."'";
		$arequetes[$nbRequetes]=$query;
		$nbRequetes=$nbRequetes+1;
		fwrite($fp, "$query;\n");

		if(isset($fichier_install) && $fichier_install!=''){
			if(!$fichier_install->section_exists("FONCTION"))
			$fichier_install->add_section("FONCTION");
			$fichier_install->add_key("FONCTION",$code_op,$fichier);
		}
	}
}

function adddroit($fonctionid,$droit){
	global $fp;
	global $firstAdddroitInsertQuery;
	global $adddroitInsertQuery;
	if($firstAdddroitInsertQuery==1)
		{
			$adddroitInsertQuery="INSERT INTO droit (id_fonction,id_groupe) VALUES ('".$fonctionid."','".$droit."')";
			$firstAdddroitInsertQuery=0;
		}
		else
		{
			$adddroitInsertQuery=$adddroitInsertQuery . ", ('".$fonctionid."','".$droit."')";
		}
}

function addmasque($nom,$fonctions){

	global $fp;
	global $masque;
	global $nbMask;
	global $firstAddmasqueInsertMasqueQuery;
	global $addmasqueInsertMasqueQuery;
	global $firstAddmasqueInsertFonctionQuery;
	global $addmasqueInsertFonctionQuery;
	
	$id_masque = searchMasque($nom);
	
	if($id_masque=="-1"){
		if($firstAddmasqueInsertMasqueQuery==1)
		{
			$addmasqueInsertMasqueQuery="INSERT INTO masque (nom_mask) VALUES ('$nom')";
			$firstAddmasqueInsertMasqueQuery=0;
		}
		else
		{			
			$addmasqueInsertMasqueQuery=$addmasqueInsertMasqueQuery . ", ('$nom')";
		}
		$id_masque = $nbMask + 1; //nextIncrement('masque', $sql_serveur, $sql_login, $sql_pass, $sql_base);
		
		// MAJ du tableau des masques!!
		$content=array();
		$content[0]=$id_masque;
		$content[1]=$nom;
		$masque[$row['id_masque']]=$content;
		$nbMask = $nbMask+1;
		}//enlever?
	
		$q = array();
		for($i=0;$i<count($fonctions);$i++){
			$idFonc=searchFonction($fonctions[$i]);
			if($idFonc!="-1"){
				$q[] = "('$id_masque','".$idFonc."')";
			}
		}
		if(count($q)>0){
			if($firstAddmasqueInsertFonctionQuery==1)
			{
				$addmasqueInsertFonctionQuery="INSERT INTO fonctionsmasque (id_mask,id_fonc) VALUES ".implode(",",$q);
				$firstAddmasqueInsertFonctionQuery=0;
			}
			else
			{				
				$addmasqueInsertFonctionQuery=$addmasqueInsertFonctionQuery . ", ".implode(",",$q);
			}		
		}
	//} new!
	return $id_masque;
}

function addDroitInMasque($id_masque,$fonction,$nom_droit){
	global $fp;
	global $firstAddDroitInMasqueQuery;
	global $addDroitInMasqueQuery;
	
	if($fonction=="9999"){
		if($firstAddDroitInMasqueQuery==1)
		{
			$addDroitInMasqueQuery="INSERT INTO droitmasque (id_mask,nom_droit,id_fonction) VALUES ('$id_masque','$nom_droit','$fonction')";
			$firstAddDroitInMasqueQuery=0;
		}
		else
		{			
			$addDroitInMasqueQuery=$addDroitInMasqueQuery . ", ('$id_masque','$nom_droit','$fonction')";
		}
	}else{
		$idFonc=searchFonction($fonction);
		if($idFonc!="-1"){
			if($firstAddDroitInMasqueQuery==1)
			{
				$addDroitInMasqueQuery="INSERT INTO droitmasque (id_mask,nom_droit,id_fonction) VALUES ('$id_masque','$nom_droit','$idFonc')";
				$firstAddDroitInMasqueQuery=0;
			}
			else
			{				
				$addDroitInMasqueQuery=$addDroitInMasqueQuery . ", ('$id_masque','$nom_droit','$idFonc')";
			}
		}
	}
}

function addGroupeUseMasque($id_masque,$id_groupe,$nom_droit){
	global $fp;
	global $firstAddGroupeUseMasqueQuery;
	global $addGroupeUseMasqueQuery;
	
	if($firstAddGroupeUseMasqueQuery==1)
		{
			$addGroupeUseMasqueQuery="INSERT INTO masque_selection (id_mask,id_groupe,nom_droit) VALUES ('$id_masque','$id_groupe','$nom_droit')";
			$firstAddGroupeUseMasqueQuery=0;
		}
		else
		{			
			$addGroupeUseMasqueQuery=$addGroupeUseMasqueQuery . ", ('$id_masque','$id_groupe','$nom_droit')";
		}
}

function addDefinitionDroit($nom,$description){
	global $fp;
	global $droitmasquenom;
	global $nbDroitMask;
	global $firstAddDefinitionDroitQuery;
	global $addDefinitionDroitQuery;
	$searchDroitMaskRes = searchDroitmasquenom($nom);
	
	if($searchDroitMaskRes=="-1"){
		if($firstAddDefinitionDroitQuery==1)
		{
			$addDefinitionDroitQuery="INSERT INTO droitmasquenom (nom,description) VALUES ('$nom','".addslashes($description)."')";
			$firstAddDefinitionDroitQuery=0;
		}
		else
		{			
			$addDefinitionDroitQuery=$addDefinitionDroitQuery . ", ('$nom','".addslashes($description)."')";
		}
		
		$idDroitMasqueNom=$nbDroitMask+1; //nextIncrement('droitmasquenom', $sql_serveur, $sql_login, $sql_pass, $sql_base);
		// MAJ du tableau des droits des masques!!
		$content=array();
		$content[0]=$idDroitMasqueNom;
		$content[1]=$nom;
		$content[2]=$description;
		$droitmasquenom[$row['id_masque']]=$content;
		$nbDroitMask = $nbDroitMask+1;
	}
}


/**
 * Recuperation des donnees de la table fonctions
 */
fillFonctions();

/**
 * Recuperation des donnees de la table masque
 */
fillMasques();

/**
 * Recuperation des donnees de la table droitmasquenom
 */
fillDroitmasquenom();

/**
 * Recuperation des donnees de la table rportal_menu
 */
fillMenu();

<bloc::fonction>
/**
 * Fonction {code_op} : {description}
 */
$droit = array();
<bloc::droit>$droit[{id}]={id_groupe};</bloc::droit>addfonction("{code_op}","{description}","{menu}",$droit,"{fichier}");
</bloc::fonction>

<bloc::masque>
/**
 * Masque {nom}
 */
$fonctions = array();
<bloc::fonc>$fonctions[]='{code_op}';</bloc::fonc>$id_masque = addmasque("{nom}",$fonctions);
<bloc::droitmasque>addDroitInMasque($id_masque,"{code_op}","{nom_droit}");</bloc::droitmasque>
<bloc::groupemasque>addGroupeUseMasque($id_masque,{id_groupe},"{nom_droit}");</bloc::groupemasque>
</bloc::masque>

<bloc::defdroit>addDefinitionDroit("{nom}","{description}");</bloc::defdroit>

//---------------------------------------------------------------------------------------------------------------

if($addfonctionInsertQuery!="")
{
	$arequetes[$nbRequetes]=$addfonctionInsertQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$addfonctionInsertQuery;\n");
}
if($adddroitInsertQuery!="")
{
	$arequetes[$nbRequetes]=$adddroitInsertQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$adddroitInsertQuery;\n");
}
if($addmasqueInsertMasqueQuery!="")
{
	$arequetes[$nbRequetes]=$addmasqueInsertMasqueQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$addmasqueInsertMasqueQuery;\n");
}
if($addmasqueInsertFonctionQuery!="")
{
	$arequetes[$nbRequetes]=$addmasqueInsertFonctionQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$addmasqueInsertFonctionQuery;\n");
}
if($addDroitInMasqueQuery!="")
{
	$arequetes[$nbRequetes]=$addDroitInMasqueQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$addDroitInMasqueQuery;\n");
}
if($addGroupeUseMasqueQuery!="")
{
	$arequetes[$nbRequetes]=$addGroupeUseMasqueQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$addGroupeUseMasqueQuery;\n");
}
if($addDefinitionDroitQuery!="")
{
	$arequetes[$nbRequetes]=$addDefinitionDroitQuery;
	$nbRequetes=$nbRequetes+1;
	fwrite($fp, "$addDefinitionDroitQuery;\n");
}

fwrite($fp, "#nb requetes Sql : $sql_nb_requete\n");
fwrite($fp, "#taille tableau $arequetes : $nbRequetes\n");


for($count=0;$count<$nbRequetes;$count++)
{
	$result = rportalrequete($arequetes[$count]) or rportalerreur ("$query","?op=");
}

fclose($fp);
?>